import { createI18n, I18nOptions, FallbackLocale, Locale } from 'vue-i18n'
import './Objects'
// import { getI18nKey } from '@/utils/routerUtil'

/**
 * 创建 i18n 配置
 * @param locale 本地化语言
 * @param fallback 回退语言
 * @returns {VueI18n}
 */
function initI18n(locale: Locale, fallback: FallbackLocale) {
  let i18nOptions: I18nOptions = {
    locale,
    fallbackLocale: fallback,
    silentFallbackWarn: true,
    // 隐藏警告提示
    silentTranslationWarn: true,
  }
  return createI18n(i18nOptions)
}

/**
 * 根据 router options 配置生成 国际化语言
 * @param lang
 * @param routes
 * @param valueKey
 * @returns {*}
 */
// function generateI18n(lang, routes, valueKey) {
//   routes.forEach(route => {
//     let keys = getI18nKey(route.fullPath).split('.')
//     let value = route['name']
//     if (route.meta && route.meta.i18n) {
//       value = route.meta.i18n[valueKey] || route['name']
//     }
//     lang.assignProps(keys, value)
//     if (route.children) {
//       generateI18n(lang, route.children, valueKey)
//     }
//   })
//   return lang
// }

/**
 * 格式化 router.options.routes，生成 fullPath
 * @param routes
 * @param parentPath
 */
// function formatFullPath(routes, parentPath = '') {
//   routes.forEach(route => {
//     let isFullPath = route.path.substring(0, 1) === '/'
//     route.fullPath = isFullPath ? route.path : (parentPath === '/' ? parentPath + route.path : parentPath + '/' + route.path)
//     if (route.children) {
//       formatFullPath(route.children, route.fullPath)
//     }
//   })
// }

// /**
//  * 从路由提取国际化数据
//  * @param i18n
//  * @param routes
//  */
// function mergeI18nFromRoutes(i18n, routes) {
//   formatFullPath(routes)
//   const CN = generateI18n(new Object(), routes, 'name')
//   const US = generateI18n(new Object(), routes, 'path')
//   i18n.mergeLocaleMessage('CN', CN)
//   i18n.mergeLocaleMessage('US', US)
//   // const messages = routesI18n.messages
//   // Object.keys(messages).forEach(lang => {
//   //   i18n.mergeLocaleMessage(lang, messages[lang])
//   // })
// }

/**
 * 从路由提取国际化数据
 * @param i18n
 * @param routes
 */
// function mergeI18nFromRoutes(i18n, routes) {
//   formatFullPath(routes)
//   const CN = generateI18n(new Object(), routes, 'CN')
//   const US = generateI18n(new Object(), routes, 'US')
//   const HK = generateI18n(new Object(), routes, 'HK')
//   i18n.mergeLocaleMessage('CN', CN)
//   i18n.mergeLocaleMessage('US', US)
//   i18n.mergeLocaleMessage('HK', HK)
//   // const messages = routesI18n.messages
//   // Object.keys(messages).forEach(lang => {
//   //   i18n.mergeLocaleMessage(lang, messages[lang])
//   // })
// }

export {
  initI18n,
  // mergeI18nFromRoutes
}
